home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
prog
/
atari
/
m2
/
cat3src
/
magic
/
extobfix.m
< prev
next >
Wrap
Text File
|
1997-10-26
|
11KB
|
186 lines
MODULE ExtObFix;
(*$R-,S-*)
FROM SYSTEM IMPORT ADDRESS, ADR, BYTE, CADR, ASSEMBLER, CALLSYS;
IMPORT MagicVDI;
IMPORT MagicAES;
IMPORT mtAppl;
IMPORT mtArea;
IMPORT mtRsc;
IMPORT mtMenubase;
IMPORT mtXobjects;
IMPORT mtPopups;
IMPORT mtDials;
IMPORT mtAlerts;
IMPORT StrConv;
IMPORT MagicStrings;
(*$Z+*)
TYPE Rectangle = RECORD
x, y, w, h : INTEGER
END;
TYPE tObjcTree = POINTER TO ARRAY [0..MAX(INTEGER)] OF MagicAES.OBJECT;
(*----------------------------------------------------------------------* * Resource-Coder 1.03 (C)92 by Peter Hellinger Software * *----------------------------------------------------------------------* * Inline-Resource erzeugt am 15.10.1993 12:56:34 * *----------------------------------------------------------------------*) TYPE tRscData = ARRAY [0..557] OF CARDINAL; CONST RscData = tRscData { 00000H, 00028H, 001D8H, 001D8H, 001D8H, 001D8H, 001D8H, 0045AH, 0045AH, 00024H, 00012H, 00001H, 00000H, 00000H, 00000H, 00000H, 00000H, 0045AH, 00000H, 00028H, 0FFFFH, 00001H, 00011H, 00014H, 00400H, 00090H, 00002H, 01100H, 00000H, 00000H, 0003AH, 00018H, 00002H, 0FFFFH, 0FFFFH, 01119H, 00040H, 00010H, 000FFH, 01101H, 00038H, 00000H, 00002H, 00001H, 00003H, 0FFFFH, 0FFFFH, 0131AH, 00000H, 00000H, 00000H, 001D8H, 00002H, 00001H, 00035H, 00001H, 00004H, 0FFFFH, 0FFFFH, 0001CH, 00000H, 00000H, 00000H, 00204H, 00002H, 00003H, 0001FH, 00001H, 00005H, 0FFFFH, 0FFFFH, 0001CH, 00000H, 00000H, 00000H, 00224H, 00002H, 00004H, 0002BH, 00001H, 00006H, 0FFFFH, 0FFFFH, 0131CH, 00000H, 00080H, 00000H, 00250H, 00002H, 00805H, 0002CH, 00001H, 00007H, 0FFFFH, 0FFFFH, 0001CH, 00000H, 00000H, 00000H, 0027DH, 00002H, 00007H, 0002EH, 00001H, 00008H, 0FFFFH, 0FFFFH, 0001CH, 00000H, 00000H, 00000H, 002ACH, 00002H, 00008H, 0002BH, 00001H, 00009H, 0FFFFH, 0FFFFH, 0001CH, 00000H, 00000H, 00000H, 002D8H, 00002H, 00009H, 0002AH, 00001H, 0000AH, 0FFFFH, 0FFFFH, 0001CH, 00000H, 00000H, 00000H, 00303H, 00002H, 0000BH, 00035H, 00001H, 0000BH, 0FFFFH, 0FFFFH, 0001CH, 00000H, 00000H, 00000H, 00339H, 00002H, 0000EH, 00019H, 00001H, 0000CH, 0FFFFH, 0FFFFH, 0001CH, 00000H, 00000H, 00000H, 00353H, 00002H, 0000FH, 00019H, 00001H, 0000DH, 0FFFFH, 0FFFFH, 0001CH, 00000H, 00000H, 00000H, 0036DH, 00002H, 00010H, 0001AH, 00001H, 0000EH, 0FFFFH, 0FFFFH, 0121AH, 00607H, 00080H, 00000H, 00388H, 0002EH, 00016H, 00009H, 00001H, 0000FH, 0FFFFH, 0FFFFH, 0001CH, 00000H, 00000H, 00000H, 0038CH, 00002H, 0000CH, 00035H, 00001H, 00010H, 0FFFFH, 0FFFFH, 0001CH, 00000H, 00000H, 00000H, 003C2H, 00002H, 00012H, 00031H, 00001H, 00011H, 0FFFFH, 0FFFFH, 0001CH, 00000H, 00000H, 00000H, 003F4H, 00002H, 00013H, 00034H, 00001H, 00000H, 0FFFFH, 0FFFFH, 0001CH, 00020H, 00000H, 00000H, 00429H, 00002H, 00014H, 00030H, 00001H, 04869H, 06C66H, 06520H, 08162H, 06572H, 02065H, 07277H, 06569H, 07465H, 07274H, 06520H, 04D61H, 06769H, 06344H, 06961H, 06C2DH, 04F62H, 06A65H, 06B74H, 07479H, 07065H, 06E00H, 04265H, 06C69H, 06562H, 06967H, 06572H, 0204DH, 06F76H, 06572H, 03A20H, 03137H, 02C20H, 0544FH, 05543H, 04845H, 05849H, 05400H, 0466CH, 07944H, 06961H, 06C2DH, 04563H, 06B65H, 02020H, 02020H, 03A20H, 07A75H, 07384H, 0747AH, 06C69H, 06368H, 02049H, 0424FH, 0582CH, 0204FH, 05554H, 04C49H, 04E45H, 04400H, 05461H, 07374H, 06174H, 07572H, 06265H, 06469H, 0656EH, 06261H, 07265H, 0204FH, 0626AH, 0656BH, 07465H, 02028H, 0616CH, 06C65H, 02053H, 0454CH, 04543H, 05441H, 0424CH, 04529H, 00052H, 06164H, 0696FH, 06275H, 07474H, 06F6EH, 02020H, 03A20H, 03138H, 02C20H, 04255H, 05454H, 04F4EH, 0206FH, 06465H, 07220H, 05354H, 05249H, 04E47H, 02C20H, 05242H, 05554H, 0544FH, 04E00H, 04368H, 06563H, 06B62H, 06F78H, 02020H, 02020H, 0203AH, 02031H, 0382CH, 02042H, 05554H, 0544FH, 04E20H, 0287EH, 05242H, 05554H, 0544FH, 04E2CH, 0207EH, 04558H, 04954H, 02900H, 04578H, 06974H, 06275H, 07474H, 06F6EH, 02020H, 0203AH, 02031H, 0382CH, 02042H, 05554H, 0544FH, 04E2CH, 02045H, 05849H, 05420H, 02821H, 05242H, 05554H, 0544FH, 04E29H, 00055H, 06E64H, 06F62H, 07574H, 0746FH, 06E20H, 02020H, 03A20H, 07A75H, 07384H, 0747AH, 06C69H, 06368H, 0206EH, 06F63H, 06820H, 06F62H, 05F66H, 06C61H, 06773H, 02042H, 06974H, 02031H, 03420H, 07365H, 0747AH, 0656EH, 00053H, 07065H, 06354H, 06578H, 07420H, 02020H, 02020H, 03A20H, 03139H, 02C20H, 05354H, 05249H, 04E47H, 00046H, 07261H, 06D65H, 0426FH, 07820H, 02020H, 02020H, 03A20H, 03230H, 02C20H, 04255H, 05454H, 04F4EH, 00043H, 06972H, 0636CH, 06562H, 07574H, 0746FH, 06E20H, 03A20H, 03232H, 02C20H, 0424FH, 05843H, 04841H, 05200H, 05B4FH, 04B00H, 04865H, 06C70H, 06275H, 07474H, 06F6EH, 02020H, 0203AH, 0207AH, 07573H, 08474H, 07A6CH, 06963H, 06820H, 06E6FH, 06368H, 0206FH, 0625FH, 0666CH, 06167H, 07320H, 04269H, 07420H, 03135H, 02073H, 06574H, 07A65H, 06E00H, 04265H, 06920H, 06465H, 06E20H, 04F62H, 06A65H, 06B74H, 07479H, 07065H, 06E20H, 05370H, 06563H, 05465H, 07874H, 02075H, 06E64H, 02046H, 07261H, 06D65H, 0426FH, 07820H, 06973H, 07420H, 06469H, 06500H, 04461H, 07273H, 07465H, 06C6CH, 0756EH, 06720H, 06162H, 06884H, 06E67H, 06967H, 02076H, 06F6DH, 0204FH, 0626AH, 0656BH, 07473H, 07461H, 07475H, 0732EH, 0204CH, 06569H, 06465H, 07220H, 07265H, 06963H, 06874H, 00068H, 06965H, 07220H, 06465H, 07220H, 0506CH, 06174H, 07A20H, 06E69H, 06368H, 0742CH, 02075H, 06D20H, 06461H, 07320H, 0616CH, 06C65H, 07320H, 06461H, 0727AH, 07573H, 07465H, 06C6CH, 0656EH, 02E00H, 00000H }; (* Ende RscData *)(*----------------------------------------------------------------------*)
(* Eigener Stack, da MM2 den Stack auf A3 liegen hat und der von
* Interface wohl nicht initialisiert wird
*)
VAR myStack : ARRAY [0..2047] OF BYTE;
PROCEDURE TestForm(tree : tObjcTree; editobj: INTEGER; get_n : ADDRESS; window : ADDRESS);
VAR r : Rectangle;
usr, but : INTEGER;
name: ARRAY[0..59] OF CHAR;
alt : ARRAY [0..127] OF CHAR;
BEGIN
IF mtDials.NewDial (tree) (* Neuen Dialog erzeugen *)
THEN
mtDials.DialCenter (tree, mtDials.CSCREEN, 0, 0, r); (* zentrieren *)
mtDials.DialForm (tree, mtDials.DSTART, r, r); (* Bildschirm reservieren *)
REPEAT
mtDials.DialDraw (tree, 0, 99, r, FALSE); (* Dialog zeichnen *)
but := mtDials.DialDo (tree, editobj); (* FormDo-Ersatz *)
(* Button deselektieren *)
EXCL (tree^[but].obState, MagicAES.SELECTED);
(* Jetzt getName aufrufen mit TC-Parametern *)
ASSEMBLER
MOVEM.L D0-A6,-(SP) ; Register sichern
MOVE.W but(A6),D0 ; Button nach D0
MOVE.L window(A6),A0 ; window nach A0
LEA name(A6),A1 ; name nach A1
MOVE.L get_n(A6),A2 ; get_n nach A2
JSR (A2) ; Procedure aufrufen
MOVEM.L (SP)+,D0-A6 ; Register restaurieren
END;
(* Jetzt String zusammenbauen *)
MagicStrings.Assign ("[0][Exitbutton:|",alt);
MagicStrings.Append (StrConv.IntToStr (but,0), alt);
MagicStrings.Append (" = '", alt);
MagicStrings.Append (name, alt);
MagicStrings.Append ("'|][[Abbruch|[Weiter]", alt);
UNTIL mtAlerts.Alert (2, alt) = 1; (* Alert ausgeben *)
mtDials.DialForm (tree, mtDials.DFINISH, r, r); (* Bildschirm freigeben *)
mtDials.DisposeDial (tree); (* und Dialog freigeben *)
END;
END TestForm;
(* Zwischenprozeduren, die mit TC-Registerbergabe aufgerufen werden *)
(*$L- keinen Eintrittscode fr die Prozedur erzeugen *)
(*
LOCAL VOID test_form (tree, editobj, get_n, window)
OBJECT *tree; A0
WORD editobj; D0
LONG get_n; D1
VOID *window; A1
*)
PROCEDURE testForm ();
BEGIN
ASSEMBLER
MOVEM.L D1-A6,-(SP)
LEA myStack,A3 ; Stack einrichten fr MM2
MOVE.L A0,(A3)+ ; Parameter umkopieren
MOVE.W D0,(A3)+
MOVE.L D1,(A3)+
MOVE.L A1,(A3)+
JSR TestForm ; MM2-Routine aufrufen
MOVEM.L (SP)+,D1-A6
END
END testForm;
PROCEDURE fixObjs();
(* OBJECT *tree; A0
* BOOLEAN is_dialog; D0
*)
(* Macht nichts, braucht auch nichts anderes aufrufen *)
END fixObjs;
PROCEDURE doAlert ();
(* WORD defbut, D0
BYTE *txt)); A0
*)
BEGIN
(* Es werden einfach nur die Parameter umkopiert und dann
* direkt mtAlerts.Alert aufgerufen, da die Parameter identisch sind.
*)
ASSEMBLER
MOVEM.L D1-A6,-(SP)
LEA myStack,A3 ; Stack einrichten fr MM2
MOVE.W D0,(A3)+ ; Default-Button
MOVE.L A0,(A3)+ ; String-Adresse
MOVE.W #255,(A3)+ ; High-Value fr String
JSR mtAlerts.Alert/
MOVEM.L (SP)+,D1-A6
END
END doAlert;
(*$L=*)
VAR localProcs : ARRAY[0..4] OF ADDRESS;
rsc : mtRsc.RESOURCE;
PROCEDURE InitObfix (init : BOOLEAN) : ADDRESS;
VAR voidO : BOOLEAN;
BEGIN
IF init
THEN
(* Alle Module initialisieren *)
MagicVDI.InitVDI();
MagicAES.InitAES();
mtAppl.InitMtAppl();
mtArea.InitMtArea();
mtAlerts.InitMtAlerts();
mtMenubase.InitMtMenubase();
mtPopups.InitMtPopups();
mtXobjects.InitMtXobjects();
mtRsc.InitMtRsc();
mtDials.InitDials();
(* Jetzt Resource relozieren *)
voidO := mtRsc.RelocRsc (CADR (RscData), rsc);
(* Adressen der Prozeduren eintragen *)
localProcs[0] := ADDRESS(fixObjs);
localProcs[1] := ADDRESS(doAlert);
localProcs[2] := ADDRESS(testForm);
(* Adresse der Help-Seite eintragen *)
localProcs[3] := mtRsc.GaddrRsc (rsc, MagicAES.RTREE, 0);
RETURN ADR(localProcs);
ELSE
RETURN NIL
END;
END InitObfix;
(*$L-*)
PROCEDURE pInitObfix();
BEGIN
ASSEMBLER
MOVEM.L D1-A6,-(SP)
LEA myStack,A3 ; Stack einrichten fr MM2
MOVE.W D0,(A3)+ ; status auf Stack
JSR InitObfix/ ; und M2-Initprozedur aufrufen
MOVEM.L (SP)+,D1-A6
END
END pInitObfix;
(*$L=*)
VAR voidI : INTEGER;
BEGIN
ASSEMBLER
BRA.S start
LEA m1(PC),A0 ; fr Linker
LEA m2(PC),A0 ; fr Linker
m1: DC.L $30363130,$31393635 ; '06101965'
SYNC
m2: DC.L pInitObfix
start:
END;
voidI := mtAlerts.Alert (1,"[3][This program can|only be started from|Interface!][[Cancel]");
END ExtObFix.